<?xml version="1.0" encoding="ASCII"?>
<component:hashComponent xmlns:component="http://www.example.org/HashComponent">
  <package>adi</package>
  <using>common.topology</using>
  <using>environment</using>
  <using>common.datapartition</using>
  <using>adi.data</using>
  <using>common.problem_size</using>
  <using>adi</using>
  <using>common.axis</using>
  <using>common.solve</using>
  <kind>Computation</kind>
  <name>ADI</name>
  <parameter>
    <identifier>instance_type</identifier>
    <variable>I</variable>
    <constraint>
      <componentConstraint>common.problem_size.Instance</componentConstraint>
      <parameter>
        <identifier>class</identifier>
        <variable>C</variable>
        <constraint>
          <componentConstraint>common.problem_size.Class</componentConstraint>
        </constraint>
      </parameter>
    </constraint>
  </parameter>
  <parameter>
    <identifier>class</identifier>
    <variable>C</variable>
    <constraint>
      <componentConstraint>common.problem_size.Class</componentConstraint>
    </constraint>
  </parameter>
  <parameter>
    <identifier>method</identifier>
    <variable>MTH</variable>
    <constraint>
      <componentConstraint>common.solve.SolvingMethod</componentConstraint>
    </constraint>
  </parameter>
  <innerComponent>
    <kind>Environment</kind>
    <identifier>z</identifier>
    <type>
      <componentName>common.topology.Ring</componentName>
    </type>
    <access>public</access>
    <exportActions>true</exportActions>
  </innerComponent>
  <innerComponent>
    <kind>Environment</kind>
    <identifier>y</identifier>
    <type>
      <componentName>common.topology.Ring</componentName>
    </type>
    <access>public</access>
    <exportActions>true</exportActions>
  </innerComponent>
  <innerComponent>
    <kind>Environment</kind>
    <identifier>x</identifier>
    <type>
      <componentName>common.topology.Ring</componentName>
    </type>
    <access>public</access>
    <exportActions>true</exportActions>
  </innerComponent>
  <innerComponent>
    <kind>Environment</kind>
    <identifier>mpi</identifier>
    <type>
      <componentName>environment.MPIDirect</componentName>
    </type>
    <access>public</access>
    <exportActions>true</exportActions>
  </innerComponent>
  <innerComponent>
    <kind>Environment</kind>
    <identifier>cells_info</identifier>
    <type>
      <componentName>common.datapartition.MultiPartitionCells</componentName>
    </type>
    <access>public</access>
    <exportActions>true</exportActions>
  </innerComponent>
  <innerComponent>
    <kind>Data</kind>
    <identifier>problem_data</identifier>
    <type>
      <componentName>adi.data.ProblemDefinition</componentName>
      <parameter>
        <identifier>instance_type</identifier>
        <variable>I</variable>
        <constraint>
          <componentConstraint>common.problem_size.Instance</componentConstraint>
          <parameter>
            <identifier>class</identifier>
            <variable>C</variable>
            <constraint>
              <componentConstraint>common.problem_size.Class</componentConstraint>
            </constraint>
          </parameter>
        </constraint>
      </parameter>
      <parameter>
        <identifier>class</identifier>
        <variable>C</variable>
        <constraint>
          <componentConstraint>common.problem_size.Class</componentConstraint>
        </constraint>
      </parameter>
    </type>
    <access>public</access>
    <exportActions>true</exportActions>
  </innerComponent>
  <innerComponent>
    <kind>Computation</kind>
    <identifier>z_solve</identifier>
    <type>
      <componentName>adi.Solver</componentName>
      <publicInnerComponent>cells_info</publicInnerComponent>
      <publicInnerComponent>problem_data</publicInnerComponent>
      <publicInnerComponent>z</publicInnerComponent>
      <parameter>
        <identifier>axis</identifier>
        <constraint>
          <componentConstraint>common.axis.ZAxis</componentConstraint>
        </constraint>
      </parameter>
      <parameter>
        <identifier>instance_type</identifier>
        <variable>I</variable>
        <constraint>
          <componentConstraint>common.problem_size.Instance</componentConstraint>
          <parameter>
            <identifier>class</identifier>
            <variable>C</variable>
            <constraint>
              <componentConstraint>common.problem_size.Class</componentConstraint>
            </constraint>
          </parameter>
        </constraint>
      </parameter>
      <parameter>
        <identifier>class</identifier>
        <variable>C</variable>
        <constraint>
          <componentConstraint>common.problem_size.Class</componentConstraint>
        </constraint>
      </parameter>
      <parameter>
        <identifier>method</identifier>
        <variable>MTH</variable>
        <constraint>
          <componentConstraint>common.solve.SolvingMethod</componentConstraint>
        </constraint>
      </parameter>
    </type>
    <access>private</access>
    <exportActions>true</exportActions>
  </innerComponent>
  <innerComponent>
    <kind>Computation</kind>
    <identifier>y_solve</identifier>
    <type>
      <componentName>adi.Solver</componentName>
      <publicInnerComponent>cells_info</publicInnerComponent>
      <publicInnerComponent>problem_data</publicInnerComponent>
      <publicInnerComponent>y</publicInnerComponent>
      <parameter>
        <identifier>axis</identifier>
        <constraint>
          <componentConstraint>common.axis.YAxis</componentConstraint>
        </constraint>
      </parameter>
      <parameter>
        <identifier>instance_type</identifier>
        <variable>I</variable>
        <constraint>
          <componentConstraint>common.problem_size.Instance</componentConstraint>
          <parameter>
            <identifier>class</identifier>
            <variable>C</variable>
            <constraint>
              <componentConstraint>common.problem_size.Class</componentConstraint>
            </constraint>
          </parameter>
        </constraint>
      </parameter>
      <parameter>
        <identifier>class</identifier>
        <variable>C</variable>
        <constraint>
          <componentConstraint>common.problem_size.Class</componentConstraint>
        </constraint>
      </parameter>
      <parameter>
        <identifier>method</identifier>
        <variable>MTH</variable>
        <constraint>
          <componentConstraint>common.solve.SolvingMethod</componentConstraint>
        </constraint>
      </parameter>
    </type>
    <access>private</access>
    <exportActions>true</exportActions>
  </innerComponent>
  <innerComponent>
    <kind>Computation</kind>
    <identifier>x_solve</identifier>
    <type>
      <componentName>adi.Solver</componentName>
      <publicInnerComponent>cells_info</publicInnerComponent>
      <publicInnerComponent>problem_data</publicInnerComponent>
      <publicInnerComponent>x</publicInnerComponent>
      <parameter>
        <identifier>axis</identifier>
        <constraint>
          <componentConstraint>common.axis.XAxis</componentConstraint>
        </constraint>
      </parameter>
      <parameter>
        <identifier>instance_type</identifier>
        <variable>I</variable>
        <constraint>
          <componentConstraint>common.problem_size.Instance</componentConstraint>
          <parameter>
            <identifier>class</identifier>
            <variable>C</variable>
            <constraint>
              <componentConstraint>common.problem_size.Class</componentConstraint>
            </constraint>
          </parameter>
        </constraint>
      </parameter>
      <parameter>
        <identifier>class</identifier>
        <variable>C</variable>
        <constraint>
          <componentConstraint>common.problem_size.Class</componentConstraint>
        </constraint>
      </parameter>
      <parameter>
        <identifier>method</identifier>
        <variable>MTH</variable>
        <constraint>
          <componentConstraint>common.solve.SolvingMethod</componentConstraint>
        </constraint>
      </parameter>
    </type>
    <access>private</access>
    <exportActions>true</exportActions>
  </innerComponent>
  <innerComponent>
    <kind>Synchronizer</kind>
    <identifier>copy_faces</identifier>
    <type>
      <componentName>adi.CopyFaces</componentName>
      <publicInnerComponent>problem_data</publicInnerComponent>
      <publicInnerComponent>cells_info</publicInnerComponent>
      <publicInnerComponent>x</publicInnerComponent>
      <publicInnerComponent>y</publicInnerComponent>
      <publicInnerComponent>z</publicInnerComponent>
      <publicInnerComponent>mpi</publicInnerComponent>
      <parameter>
        <identifier>instance_type</identifier>
        <variable>I</variable>
        <constraint>
          <componentConstraint>common.problem_size.Instance</componentConstraint>
          <parameter>
            <identifier>class</identifier>
            <variable>C</variable>
            <constraint>
              <componentConstraint>common.problem_size.Class</componentConstraint>
            </constraint>
          </parameter>
        </constraint>
      </parameter>
      <parameter>
        <identifier>class</identifier>
        <variable>C</variable>
        <constraint>
          <componentConstraint>common.problem_size.Class</componentConstraint>
        </constraint>
      </parameter>
    </type>
    <access>private</access>
    <exportActions>true</exportActions>
  </innerComponent>
  <innerComponent>
    <kind>Computation</kind>
    <identifier>compute_rhs</identifier>
    <type>
      <componentName>adi.ComputeRHS</componentName>
      <publicInnerComponent>cells_info</publicInnerComponent>
      <publicInnerComponent>problem_data</publicInnerComponent>
      <parameter>
        <identifier>instance_type</identifier>
        <variable>I</variable>
        <constraint>
          <componentConstraint>common.problem_size.Instance</componentConstraint>
          <parameter>
            <identifier>class</identifier>
            <variable>C</variable>
            <constraint>
              <componentConstraint>common.problem_size.Class</componentConstraint>
            </constraint>
          </parameter>
        </constraint>
      </parameter>
      <parameter>
        <identifier>class</identifier>
        <variable>C</variable>
        <constraint>
          <componentConstraint>common.problem_size.Class</componentConstraint>
        </constraint>
      </parameter>
    </type>
    <access>private</access>
    <exportActions>true</exportActions>
  </innerComponent>
  <innerComponent>
    <kind>Computation</kind>
    <identifier>add</identifier>
    <type>
      <componentName>adi.Add</componentName>
      <publicInnerComponent>problem_data</publicInnerComponent>
      <publicInnerComponent>cells_info</publicInnerComponent>
      <parameter>
        <identifier>instance_type</identifier>
        <variable>I</variable>
        <constraint>
          <componentConstraint>common.problem_size.Instance</componentConstraint>
          <parameter>
            <identifier>class</identifier>
            <variable>C</variable>
            <constraint>
              <componentConstraint>common.problem_size.Class</componentConstraint>
            </constraint>
          </parameter>
        </constraint>
      </parameter>
      <parameter>
        <identifier>class</identifier>
        <variable>C</variable>
        <constraint>
          <componentConstraint>common.problem_size.Class</componentConstraint>
        </constraint>
      </parameter>
    </type>
    <access>private</access>
    <exportActions>true</exportActions>
  </innerComponent>
  <unit index="0" name="adi" parallel="true">
    <slice index="0" inner="z_solve" unit="solve"/>
    <slice index="0" inner="y_solve" unit="solve"/>
    <slice index="0" inner="x_solve" unit="solve"/>
    <slice index="0" inner="copy_faces" unit="copy_faces"/>
    <slice index="0" inner="compute_rhs" unit="compute_rhs"/>
    <slice index="0" inner="add" unit="add"/>
    <action>
      <identifier>main</identifier>
      <protocol>
        <seq id="main" repeat="false">
          <action>
            <perform repeat="false" action_id="go" slice_id="copy_faces">
              <guard>
                <condition cond_id="is_multiple" slice_id="copy_faces"/>
              </guard>
            </perform>
          </action>
          <action>
            <perform repeat="false" action_id="go" slice_id="compute_rhs"/>
          </action>
          <action>
            <perform repeat="false" action_id="go" slice_id="x_solve"/>
          </action>
          <action>
            <perform repeat="false" action_id="go" slice_id="y_solve"/>
          </action>
          <action>
            <perform repeat="false" action_id="go" slice_id="z_solve"/>
          </action>
          <action>
            <perform repeat="false" action_id="go" slice_id="add"/>
          </action>
        </seq>
      </protocol>
    </action>
  </unit>
</component:hashComponent>